# 定义源文件和头文件目录
SRC_DIR := src
INCLUDE_DIR := include

# 使用shell命令递归查找源文件和头文件
SOURCES := $(shell find $(SRC_DIR) -type f -name '*.c')
HEADERS := $(shell find $(INCLUDE_DIR) -type f -name '*.h')

# 从源文件列表生成对象文件列表
OBJS := $(patsubst %.c, %.o, $(SOURCES))

# 定义编译器和编译选项
CC := gcc
CFLAGS := -I$(INCLUDE_DIR) -Wall -g -lpthread -std=c99 -D_SVID_SOURCE


# 定义目标文件
TARGET := server.out

# 规则：编译目标文件
$(TARGET): $(OBJS)
	$(CC) -o $@ $^ $(CFLAGS) 
	rm -rf $(OBJS)

# 规则：编译源文件
%.o: %.c $(HEADERS)
	$(CC) $(CFLAGS) -c $< -o $@

# 规则：清理生成的文件
.PHONY: clean
clean:
	-rm -rf $(OBJS) $(TARGET)

# 规则：重新构建
.PHONY: rebuild
rebuild: clean $(TARGET)

# 打印源文件和头文件列表（可选）
.PHONY: print_files
print_files:
	@echo "Sources: $(SOURCES)"
	@echo "Headers: $(HEADERS)"
